package cn.thr.ymcc.service;

import cn.thr.ymcc.domain.PayOrder;
import cn.thr.ymcc.domain.dto.ApplyDto;
import cn.thr.ymcc.dto.PayOrderDto;
import com.baomidou.mybatisplus.extension.service.IService;

import java.util.Map;

/**
 * <p>
 *  服务类
 * </p>
 *
 * @author thr
 * @since 2023-03-10
 */
public interface IPayOrderService extends IService<PayOrder> {
    /**
     * 保存支付单 ，与父接口中的save(PayOrder) 行程方法重载
     * @param payOrderDto
     */
    void save(PayOrderDto payOrderDto);
    /**
     * 申请支付
     * @param applyDto
     * @return html 标签
     */
    String apply(ApplyDto applyDto);
    /**
     * 完成后续业务
     * 1)修改支付单状态为已支付  --支付服务中
     * 2）添加支付流水记录       --支付服务中
     * 3）修改订单状态为已支付     --订单服务
     * 4）添加用户购买课程的记录    --课程服务
     * 第一二个操作都在当前支付服务中，可以直接操作，比较方便
     * 第二三个操作在订单服务中国，第四操作在课程服务中，这个需要涉及到跨数据库操作（分布式事务）
     *  1）可以使用openfeign 调用订单服务和课程服务的接口
     *  2）可以使用MQ 发消息（最终一致性），在订单服务和课程服务中分别写消费者
     */
    void paySuccess(Map<String, String> parameters);

    /**
     * 支付超时处理
     * 修改支付单
     * @param orderNo
     */
    void payTimeout(String orderNo);
}
